Міністерство освіти і науки України
Національний університет „ Львівська політехніка “
Кафедра ІСМ
Звіт
про виконання лабораторної роботи № 6
з курсу „Технології проектування програмних систем”
на тему: «Віртуальні функції, поліморфізм та пізнє зв’язування»
Львів-2006
Мета роботи: вивчення поліморфізму класів та механізму його підтримки за допомогою віртуальних функцій.
Порядок роботи
1. Ознайомитися з теоретичним матеріалом про наслідування класів у Borland C++.
2. Проаналізувати результати роботи фрагментів програм у приведених прикладах наслідування класів.
3. Оголосити базовий клас з необхідними полями, конструкторами, деструктором, методами. Оголосити похідний клас.
Програма та результати її виконання
#include <vcl.h>
#include <iostream.h>
#include <conio.h> //Для функції gotoxy();
#include <stdlib.h>
class point {
protected:
int x, y; // Координати символа.
public:
point(int xi = 0, int yi = 0); // Конструктор.
int& givex(void);
int& givey(void);
virtual void show(void);
virtual void move(int xn = 0, int yn = 0);
private:
virtual void hide();
};
point::point (int xi, int yi)
{ x = xi; y = yi; } //
int& point::givex(void) { return x; } // Доступ до х.
int& point::givey(void) { return y; } // Доступ до у.
// Зобразити символ на екрані.
void point::show(void)
{ gotoxy(x,y); cout << "*"; }
// Забрати з екрану зображення символа.
void point::hide(void)
{ gotoxy(x,y); cout << " "; }
// Перемістити символ в нове місце экрана.
void point::move (int xn, int yn)
{ hide();
x = xn; y = yn;
show(); }
class star: public point
{
protected:
int rad; // Довжина променів зірки.
int vis; // Видимість зірки на ерані
public:
// Конструктор класу STAR:
star (int xi, int yi, int ri): point(xi,yi)
{ vis = 0; rad = ri; }
~star() // Деструктор класу STAR.
{ hide(); // Забрати з екрану зображення зірки.
}
virtual void show(); // Зобразити зірку на екрані дисплея.
virtual void hide(); // Забрати з екрану зображення зірки
// Перемістити зображення:
virtual void move(int xn, int yn)
{ hide(); // Забрати з екрану старе зображення.
// Змінити координати центру зірки:
x = xn;
y = yn;
show(); // Вивести зображення в новому місці.
}
// Змінити розмір зображення плями:
void vary(float dr)
{ float a;
hide(); // Забрати з екрану старе зображення.
// Вирахувати новий радіус:
a = dr * rad;
if (a <= 0) rad = 0; else rad = (int)a;
show(); // Зобразити зірку на екрані.
}
int& giver(void) // Доступ до довжин променів.
{ return rad; }
};
void star::show() // Зобразити зірку на екрані дисплея.
{ int i;
// Якщо зірка не зображена на екрані:
if (vis == 0)
{ // Зобразити зірку:
gotoxy(x,y); cout << "*";
for (int i=1;i<=rad;i++)
{
gotoxy(x+i,y); cout << "*";
gotoxy(x-i,y); cout << "*";
gotoxy(x,y+i); cout << "*";
gotoxy(x,y-i); cout << "*"; }
for (i=-rad;i<=rad;i++)
{
gotoxy(x+i,y+i); cout << "*";
gotoxy(x-i,y+i); cout << "*";
}
vis = 1;
}
}
void star::hide() // Забрати з екрану зображення зірки
{ int i;
if (vis == 0) // нема що забирати.
return;
// Стерти з екрану зображення:
gotoxy(x,y); cout << " ";
for (int i=1;i<=rad;i++)
{
gotoxy(x+i,y); cout << " ";
gotoxy(x-i,y); cout << " ";
gotoxy(x,y+i); cout << " ";
gotoxy(x,y-i); cout << " "; }
for (i=-rad;i<=rad;i++)
{gotoxy(x+i,y+i); cout << " ";
gotoxy(x-i,y+i); cout << " ";
}
vis = 0;
}
//---------------------------------------------------------------------------
int x,y,z;
int main()
{
randomize();
x=random(6);
randomize();
star A(7,7,x);
A.show();
getch ();
A.hide();
randomize;
x=random(4);
star B(41,12,x);
B.show();
getch ();
}
Рис.1. Вигляд вікна програми після виконання
Висновки
Під час виконання лабораторної ро...